package com.ybu.oodd.service.impl;

import com.ybu.oodd.pojo.AIResult;
import com.ybu.oodd.pojo.PageResult;
import com.ybu.oodd.service.AIService;
import com.ybu.oodd.utils.ai.AIResumeProcessor;
import com.ybu.oodd.utils.ai.QwenAIClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@Service
@Slf4j
public class AIServiceImpl implements AIService {

    @Autowired
    private QwenAIClient qwenAIClient;

    @Value("${file.upload-dir}")
    private String path;

    //删除文件
    public boolean deleteUploadedFile(String filename) {
        if (filename == null || filename.isBlank()) {
            log.info("文件名为空，无法删除");
            return false;
        }

        // 防止路径穿越攻击（只允许文件名，不允许包含 / 或 \）
        if (filename.contains("/") || filename.contains("\\")) {
            log.info("非法文件名，包含路径分隔符: " + filename);
            return false;
        }

        try {
            Path templatesDir = Paths.get(path);
            if (!Files.exists(templatesDir) || !Files.isDirectory(templatesDir)) {
                log.info("上传目录不存在或不是一个目录: " + path);
                return false;
            }

            Path filePath = templatesDir.resolve(filename).normalize();

            // 再次确保文件在 templates 目录下（防止 ../ 攻击）
            if (!filePath.startsWith(templatesDir)) {
                log.info("拒绝删除非法路径: " + filePath);
                return false;
            }

            if (Files.exists(filePath)) {
                Files.delete(filePath);
                log.info("文件已删除: " + filePath);
                return true;
            } else {
                log.info("文件不存在，无需删除: " + filePath);
                return true; // 也可以视为成功
            }

        } catch (Exception e) {
            log.info("删除文件失败: " + filename + " 错误信息: " + e.getMessage());
            return false;
        }
    }

    @Override
    public PageResult<AIResult> AIJL(String file, String userPrompt){
        try {
            String s = qwenAIClient.AIJL(file, userPrompt);
            log.info("Qwen API 返回结果: {}", s);
            PageResult<AIResult> result = AIResumeProcessor.parseAIResumeResult(s);
            return result;
        } catch (IOException e) {
            log.error("调用 Qwen API 失败", e);
        } finally {
            deleteUploadedFile(file);
        }
        return null;
    }
}
